home *** CD-ROM | disk | FTP | other *** search
/ Assassins - Ultimate CD Games Collection 4 / Assassins 4 (1999)(Weird Science).iso / misc / omega / source / effect2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-02  |  16.7 KB  |  625 lines

  1. /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
  2. /* effect2.c */
  3.  
  4. #include "glob.h"
  5.  
  6.  
  7.  
  8. void knowledge(blessing)
  9. int blessing;
  10. {
  11.   if (blessing < 0)
  12.     mprint("You feel ignorant.");
  13.   else {
  14.     mprint("You feel knowledgeable!");
  15.     menuclear();
  16.     menuprint("Current Point Total: ");
  17.     menulongprint(calc_points());
  18.     menuprint("\nAlignment:");
  19.     if (Player.alignment == 0)
  20.       menuprint("Neutral, embodying the Cosmic Balance");
  21.     else if (abs(Player.alignment) < 10)
  22.       menuprint("Neutral, tending toward ");
  23.     else if (abs(Player.alignment) < 50)
  24.       menuprint("Neutral-");
  25.     else if (abs(Player.alignment) < 100) ;
  26.     else if (abs(Player.alignment) < 200)
  27.       menuprint("Servant of ");
  28.     else if (abs(Player.alignment) < 400)
  29.       menuprint("Master of ");
  30.     else if (abs(Player.alignment) < 800)
  31.       menuprint("The Essence of ");
  32.     else menuprint("The Ultimate Avatar of ");
  33.     if (Player.alignment < 0) menuprint("Chaos\n");
  34.     else if (Player.alignment > 0) menuprint("Law\n");
  35.     showmenu();
  36.     morewait();
  37.     menuclear();
  38.     menuprint("Current stati:\n");
  39.     if (Player.status[BLINDED])
  40.       menuprint("Blinded\n");
  41.     if (Player.status[SLOWED])
  42.       menuprint("Slowed\n");
  43.     if (Player.status[HASTED])
  44.       menuprint("Hasted\n");
  45.     if (Player.status[DISPLACED])
  46.       menuprint("Displaced\n");
  47.     if (Player.status[SLEPT])
  48.       menuprint("Slept\n");
  49.     if (Player.status[DISEASED])
  50.       menuprint("Diseased\n");
  51.     if (Player.status[POISONED])
  52.       menuprint("Poisoned\n");
  53.     if (Player.status[BREATHING])
  54.       menuprint("Breathing\n");
  55.     if (Player.status[INVISIBLE])
  56.       menuprint("Invisible\n");
  57.     if (Player.status[REGENERATING])
  58.       menuprint("Regenerating\n");
  59.     if (Player.status[VULNERABLE])
  60.       menuprint("Vulnerable\n");
  61.     if (Player.status[BERSERK])
  62.       menuprint("Berserk\n");
  63.     if (Player.status[IMMOBILE])
  64.       menuprint("Immobile\n");
  65.     if (Player.status[ALERT])
  66.       menuprint("Alert\n");
  67.     if (Player.status[AFRAID])
  68.       menuprint("Afraid\n");
  69.     if (Player.status[ACCURATE])
  70.       menuprint("Accurate\n");
  71.     if (Player.status[HERO])
  72.       menuprint("Heroic\n");
  73.     if (Player.status[LEVITATING])
  74.       menuprint("Levitating\n");
  75.     showmenu();
  76.     morewait();
  77.     menuclear();
  78.     menuprint("Immunities:\n");
  79.     if (p_immune(NORMAL_DAMAGE))
  80.       menuprint("Normal Damage\n");
  81.     if (p_immune(FLAME))
  82.       menuprint("Flame\n");
  83.     if (p_immune(ELECTRICITY))
  84.       menuprint("Electricity\n");
  85.     if (p_immune(COLD))
  86.       menuprint("Cold\n");
  87.     if (p_immune(POISON))
  88.       menuprint("Poison\n");
  89.     if (p_immune(ACID))
  90.       menuprint("Acid\n");
  91.     if (p_immune(FEAR))
  92.       menuprint("Fear\n");
  93.     if (p_immune(SLEEP))
  94.       menuprint("Sleep\n");
  95.     if (p_immune(NEGENERGY))
  96.       menuprint("Negative Energies\n");
  97.     if (p_immune(THEFT))
  98.       menuprint("Theft\n");
  99.     if (p_immune(GAZE))
  100.       menuprint("Gaze\n");
  101.     if (p_immune(INFECTION))
  102.       menuprint("Infection\n");
  103.     showmenu();
  104.     morewait();
  105.     menuclear();
  106.     menuprint("Ranks:\n");
  107.     switch(Player.rank[LEGION]) {
  108.     case COMMANDANT:
  109.       menuprint("Commandant of the Legion"); 
  110.       break;
  111.     case COLONEL:    
  112.       menuprint("Colonel of the Legion");
  113.       break;
  114.     case FORCE_LEADER:
  115.       menuprint("Force Leader of the Legion");
  116.       break;
  117.     case CENTURION:
  118.       menuprint("Centurion of the Legion");
  119.       break;
  120.     case LEGIONAIRE:
  121.       menuprint("Legionaire");
  122.       break;
  123.     }
  124.     if (Player.rank[LEGION] > 0) {
  125.       menuprint(" (");
  126.       menunumprint(Player.guildxp[LEGION]);
  127.       menuprint(" XP).\n");
  128.     }
  129.     switch(Player.rank[ARENA]) {
  130.     case -1:
  131.       menuprint("Ex-gladiator\n");
  132.       break;
  133.     case CHAMPION:
  134.       menuprint("Gladiator Champion");
  135.       break;
  136.     case GLADIATOR:    
  137.       menuprint("Gladiator of the Arena");
  138.       break;
  139.     case RETIARIUS:
  140.       menuprint("Retiarius of the Arena");
  141.       break;
  142.     case BESTIARIUS:
  143.       menuprint("Bestiarius of the Arena");
  144.       break;
  145.     case TRAINEE:
  146.       menuprint("Gladiator Trainee of the Arena");
  147.       break;
  148.     }
  149.     if (Player.rank[ARENA] > 0) {
  150.       menuprint(" (Opponent ");
  151.       menunumprint(Arena_Opponent);
  152.       menuprint(")\n");
  153.     }
  154.     switch(Player.rank[COLLEGE]) {
  155.     case ARCHMAGE:
  156.       menuprint("Archmage of the Collegium Magii");
  157.       break;
  158.     case MAGE:
  159.       menuprint("Collegium Magii: Mage");
  160.       break;
  161.     case PRECEPTOR:
  162.       menuprint("Collegium Magii: Preceptor");
  163.       break;
  164.     case STUDENT:
  165.       menuprint("Collegium Magii: Student");
  166.       break;
  167.     case NOVICE:
  168.       menuprint("Collegium Magii: Novice");
  169.       break;
  170.     }
  171.     if (Player.rank[COLLEGE] > 0) {
  172.       menuprint(" (");
  173.       menunumprint(Player.guildxp[COLLEGE]);
  174.       menuprint(" XP).\n");
  175.     }
  176.     switch(Player.rank[NOBILITY]) {
  177.     case DUKE:
  178.       menuprint("Duke of Rampart");
  179.       break;
  180.     case LORD:
  181.       menuprint("Peer of the Realm");
  182.       break;
  183.     case KNIGHT:
  184.       menuprint("Order of the Knights of Rampart");
  185.       break;
  186.     case ESQUIRE:
  187.       menuprint("Squire of Rampart");
  188.       break;
  189.     case COMMONER:
  190.       menuprint("Commoner");
  191.       break;
  192.     default:
  193.       menuprint("Lowly Commoner\n");
  194.       break;
  195.     }
  196.     if (Player.rank[NOBILITY] > 1) {
  197.       menuprint(" (");
  198.       menunumprint(Player.rank[NOBILITY] - 1);
  199.       menuprint(ordinal(Player.rank[NOBILITY] - 1));
  200.       menuprint(" Quest Completed)\n");
  201.     }
  202.     else if (Player.rank[NOBILITY] == 1) {
  203.       menuprint(" (1st Quest Undertaken)\n");
  204.     }
  205.     switch(Player.rank[CIRCLE]) {
  206.     case -1:
  207.       menuprint("Former member of the Circle.\n");
  208.       break;
  209.     case PRIME:
  210.       menuprint("Prime Sorceror of the Inner Circle");
  211.       break;
  212.     case HIGHSORCEROR:
  213.       menuprint("High Sorceror of the Inner Circle");
  214.       break;
  215.     case SORCEROR:
  216.       menuprint("Member of the Circle of Sorcerors");
  217.       break;
  218.     case ENCHANTER:
  219.       menuprint("Member of the Circle of Enchanters");
  220.       break;
  221.     case INITIATE:
  222.       menuprint("Member of the Circle of Initiates");
  223.       break;
  224.     }
  225.     if (Player.rank[CIRCLE] > 0) {
  226.       menuprint(" (");
  227.       menunumprint(Player.guildxp[CIRCLE]);
  228.       menuprint(" XP).\n");
  229.     }
  230.     switch(Player.rank[ORDER]) {
  231.     case -1:
  232.       menuprint("Washout from the Order of Paladins\n");
  233.       break;
  234.     case JUSTICIAR:
  235.       menuprint("Justiciar of the Order of Paladins");
  236.       break;
  237.     case PALADIN:
  238.       menuprint("Paladin of the Order");
  239.       break;
  240.     case CHEVALIER:
  241.       menuprint("Chevalier of the Order");
  242.       break;
  243.     case GUARDIAN:
  244.       menuprint("Guardian of the Order");
  245.       break;
  246.     case GALLANT:
  247.       menuprint("Gallant of the Order");
  248.       break;
  249.     }
  250.     if (Player.rank[ORDER] > 0) {
  251.       menuprint(" (");
  252.       menunumprint(Player.guildxp[ORDER]);
  253.       menuprint(" XP).\n");
  254.     }
  255.     switch(Player.rank[THIEVES]) {
  256.     case SHADOWLORD:
  257.       menuprint("Guild of Thieves: Shadowlord");
  258.       break;
  259.     case TMASTER:
  260.       menuprint("Guild of Thieves: Master Thief");
  261.       break;
  262.     case THIEF:
  263.       menuprint("Guild of Thieves: Thief");
  264.       break;
  265.     case ATHIEF:
  266.       menuprint("Guild of Thieves: Apprentice Thief");
  267.       break;
  268.     case TMEMBER:
  269.       menuprint("Guild of Thieves: Candidate Member");
  270.       break;
  271.     }
  272.     if (Player.rank[THIEVES] > 0) {
  273.       menuprint(" (");
  274.       menunumprint(Player.guildxp[THIEVES]);
  275.       menuprint(" XP).\n");
  276.     }
  277.     switch(Player.rank[PRIESTHOOD]) {
  278.       case LAY:
  279.         menuprint("A lay devotee of ");
  280.     break;
  281.       case ACOLYTE:
  282.         menuprint("An Acolyte of ");
  283.     break;
  284.       case PRIEST:
  285.         menuprint("A Priest of ");
  286.     break;
  287.       case SPRIEST:
  288.         menuprint("A Senior Priest of ");
  289.     break;
  290.       case HIGHPRIEST:
  291.         menuprint("The High Priest of ");
  292.     break;
  293.       }
  294.     switch(Player.patron) {
  295.       case ODIN:
  296.         menuprint("Odin");
  297.     break;
  298.       case SET:
  299.         menuprint("Set");
  300.     break;
  301.       case ATHENA:
  302.         menuprint("Athena");
  303.     break;
  304.       case HECATE:
  305.         menuprint("Hecate");
  306.     break;
  307.       case DRUID:
  308.         menuprint("Druidism");
  309.     break;
  310.       case DESTINY:
  311.         menuprint("the Lords of Destiny");
  312.     break;
  313.     }
  314.     if (Player.rank[PRIESTHOOD] > 0) {
  315.       menuprint(" (");
  316.       menunumprint(Player.guildxp[PRIESTHOOD]);
  317.       menuprint(" XP).\n");
  318.     }
  319.     if (Player.rank[ADEPT] > 0) 
  320.       menuprint("**************\n*Omegan Adept*\n**************\n");
  321.     showmenu();
  322.     morewait();
  323.     xredraw();
  324.   }
  325. }
  326.  
  327.  
  328. /* Recreates the current level */
  329. void flux(blessing)
  330. int blessing;
  331. {
  332.   mprint("The universe warps around you!");
  333.   if (Current_Environment == E_CITY) {
  334.     mprint("Sensing dangerous high order magic, the Collegium Magii");
  335.     mprint("and the Circle of Sorcerors join forces to negate the spell.");
  336.     mprint("You are zapped by an antimagic ray!!!");
  337.     dispel(-1);
  338.     mprint("The universe unwarps itself....");
  339.   }
  340.   else if (Current_Environment != Current_Dungeon)
  341.     mprint("Odd.... No effect!");
  342.   else {
  343.     mprint("You stagger as the very nature of reality warps!");
  344.     erase_level();
  345.     Level->generated = FALSE;
  346.     mprint("The fabric of spacetime reknits....");
  347.     change_level(Level->depth-1,Level->depth,TRUE);
  348.   }
  349. }
  350.  
  351. /*Turns on displacement status for the player */
  352. void displace(blessing)
  353. int blessing;
  354. {
  355.   if (blessing > -1) {
  356.       mprint("You feel a sense of dislocation.");
  357.       Player.status[DISPLACED] = blessing + random_range(6);
  358.     }
  359.   else {
  360.     mprint("You feel vulnerable");
  361.     Player.status[VULNERABLE] += random_range(6) - blessing;
  362.   }
  363. }
  364.  
  365.   
  366.     
  367. void invisible(blessing)
  368. int blessing;
  369. {  
  370.   if (blessing > -1) {
  371.     mprint("You feel transparent!");
  372.     Player.status[INVISIBLE]+= 2+5*blessing;
  373.   }
  374.   else {
  375.     mprint("You feel dangerous!");
  376.     Player.status[VULNERABLE] +=
  377.       random_range(10)+1;
  378.   }
  379. }
  380.  
  381.  
  382. void warp(blessing)
  383. int blessing;
  384. {
  385.   int newlevel;
  386.   if (Current_Environment != Current_Dungeon) 
  387.     mprint("How strange! No effect....");
  388.   else {
  389.     mprint("Warp to which level? ");
  390.     newlevel = (int) parsenum();
  391.     if (newlevel >= MaxDungeonLevels || blessing < 0 || newlevel < 1) {
  392.       mprint("You have been deflected!");
  393.       newlevel=random_range(MaxDungeonLevels - 1) + 1;
  394.     }
  395.     mprint("You dematerialize...");
  396.     change_level(Level->depth,newlevel,FALSE);
  397.   }
  398.   roomcheck();
  399. }
  400.  
  401. void alert(blessing)
  402.  int blessing;
  403. {
  404.   if (blessing > -1) {
  405.     mprint("You feel on-the-ball.");
  406.     Player.status[ALERT]+= 4+(5*blessing);
  407.   }
  408.   else sleep_player(abs(blessing)+3);
  409. }
  410.  
  411. void regenerate(blessing)
  412. int blessing;
  413. {
  414.   if (blessing < 0)
  415.     heal(blessing * 10);
  416.   else {
  417.     mprint("You feel abnormally healthy.");
  418.     Player.status[REGENERATING] += (blessing+1)*50;
  419.   }
  420. }
  421.  
  422. void haste(blessing)
  423. int blessing;
  424. {
  425.   if (blessing > -1) {
  426.     if (! Player.status[HASTED]) 
  427.       mprint("The world slows down!"); 
  428.     else mprint("Nothing much happens.");
  429.     if (Player.status[SLOWED]) 
  430.       Player.status[SLOWED] = 0;
  431.     Player.status[HASTED] += (blessing*100)+random_range(250);
  432.   }
  433.   else {
  434.     mprint("You feel slower.");
  435.     if (Player.status[HASTED] > 0) mprint("...but the feeling quickly fades.");
  436.     else Player.status[SLOWED] += random_range(250)+250;
  437.   }
  438. }
  439.  
  440.  
  441. void recover_stat(blessing)
  442. int blessing;
  443. {
  444.   if (blessing < 0) {
  445.     mprint("You feel a cold surge!");
  446.     switch(random_range(6)) {
  447.       case 0: Player.str = min(Player.str-1,Player.maxstr-1); break;
  448.       case 1: Player.con = min(Player.con-1,Player.maxcon-1); break;
  449.       case 2: Player.dex = min(Player.dex-1,Player.maxdex-1); break;
  450.       case 3: Player.agi = min(Player.agi-1,Player.maxagi-1); break;
  451.       case 4: Player.iq = min(Player.iq-1,Player.maxiq-1); break;
  452.       case 5: Player.pow = min(Player.pow-1,Player.maxpow-1); break;
  453.     }
  454.   }
  455.   else {
  456.     mprint("You feel a warm tingle!");
  457.     Player.str = max(Player.str,Player.maxstr);
  458.     Player.con = max(Player.con,Player.maxcon);
  459.     Player.dex = max(Player.dex,Player.maxdex);
  460.     Player.agi = max(Player.agi,Player.maxagi);
  461.     Player.iq = max(Player.iq,Player.maxiq);
  462.     Player.pow = max(Player.pow,Player.maxpow);
  463.     }
  464.   calc_melee();
  465. }
  466.  
  467. void augment(blessing)
  468. int blessing;
  469. {
  470.   if (blessing < 0) {
  471.     mprint("You feel a cold surge!");
  472.     switch(random_range(6)) {
  473.       case 0: Player.str = min(Player.str-1,Player.maxstr-1); break;
  474.       case 1: Player.con = min(Player.con-1,Player.maxcon-1); break;
  475.       case 2: Player.dex = min(Player.dex-1,Player.maxdex-1); break;
  476.       case 3: Player.agi = min(Player.agi-1,Player.maxagi-1); break;
  477.       case 4: Player.iq = min(Player.iq-1,Player.maxiq-1); break;
  478.       case 5: Player.pow = min(Player.pow-1,Player.maxpow-1); break;
  479.     }
  480.   }
  481.   else if (blessing == 0) {
  482.     mprint("You feel a warm tingle!");
  483.     switch(random_range(6)) {
  484.       case 0: Player.str = max(Player.str+1,Player.maxstr+1); break;
  485.       case 1: Player.con = max(Player.con+1,Player.maxcon+1); break;
  486.       case 2: Player.dex = max(Player.dex+1,Player.maxdex+1); break;
  487.       case 3: Player.agi = max(Player.agi+1,Player.maxagi+1); break;
  488.       case 4: Player.iq = max(Player.iq+1,Player.maxiq+1); break;
  489.       case 5: Player.pow = max(Player.pow+1,Player.maxpow+1); break;
  490.     }
  491.   }
  492.   else {
  493.     mprint("You feel a hot flash!");
  494.     Player.str = max(Player.str+1,Player.maxstr+1);
  495.     Player.con = max(Player.con+1,Player.maxcon+1);
  496.     Player.dex = max(Player.dex+1,Player.maxdex+1);
  497.     Player.agi = max(Player.agi+1,Player.maxagi+1);
  498.     Player.iq = max(Player.iq+1,Player.maxiq+1);
  499.     Player.pow = max(Player.pow+1,Player.maxpow+1);
  500.   }
  501.   calc_melee();
  502. }
  503.  
  504. void breathe(blessing)
  505. int blessing;
  506. {
  507.   if (blessing > -1) {
  508.       mprint("Your breath is energized!");
  509.       Player.status[BREATHING] += 6+blessing;
  510.     }
  511.   else {
  512.     mprint("You choke as your lungs fill with water!");
  513.     p_damage(50,UNSTOPPABLE,"drowning");
  514.   }
  515. }
  516.  
  517.  
  518. void i_chaos(o)
  519. pob o;
  520. {
  521.   if (Player.alignment < 0) {
  522.     Player.alignment -= random_range(20);
  523.     mprint("You feel deliciously chaotic!");
  524.     gain_experience(abs(Player.alignment)*10);
  525.   }
  526.   else {
  527.     mprint("You feel a sense of inner turmoil!");
  528.     Player.alignment -= random_range(20);
  529.   }
  530. }
  531.  
  532. void i_law(o)
  533. pob o;
  534. {
  535.   if (Player.alignment > 0) {
  536.     Player.alignment += random_range(20);
  537.     mprint("You feel wonderfully lawful!");
  538.     gain_experience(Player.alignment*10);
  539.   }
  540.   else {
  541.     mprint("You feel a sense of inner constraint!");
  542.     Player.alignment += random_range(20);
  543.   }
  544. }
  545.  
  546. void sanctify(blessing)
  547. int blessing;
  548. {
  549.   if (blessing > -1) {
  550.     if (Level->environment == E_TEMPLE) 
  551.       mprint("Odd, the spell has no effect. I wonder why.");
  552.     else if (Level->site[Player.x][Player.y].locchar == ALTAR) 
  553.       mprint("This site can't get any holier!");
  554.     else if (Player.patron == 0) {
  555.       mprint("The gods are angered!");
  556.       Level->site[Player.x][Player.y].locchar = LAVA;
  557.       Level->site[Player.x][Player.y].p_locf = L_LAVA;
  558.       lset(Player.x, Player.y, CHANGED);
  559.       p_movefunction(L_LAVA);
  560.     }
  561.     else {
  562.       Level->site[Player.x][Player.y].locchar = ALTAR;
  563.       Level->site[Player.x][Player.y].aux = Player.patron;
  564.       Level->site[Player.x][Player.y].p_locf = L_ALTAR;
  565.       lset(Player.x, Player.y, CHANGED);
  566.       mprint("You are standing on sacred ground!");
  567.     }
  568.   }
  569.   else {
  570.     if (Level->site[Player.x][Player.y].locchar == ALTAR) {
  571.       mprint("The altar crumbles before your unholy blast....");
  572.       Level->site[Player.x][Player.y].locchar = FLOOR;
  573.       Level->site[Player.x][Player.y].p_locf = L_NO_OP;
  574.       lset(Player.x, Player.y, CHANGED);
  575.       if (Level->site[Player.x][Player.y].aux == Player.patron) {
  576.     mprint("Your deity is not amused....");
  577.     p_damage(Player.hp-1,UNSTOPPABLE,"Divine Wrath");
  578.       }
  579.       else if ((Player.patron == ATHENA) || (Player.patron == ODIN)) {
  580.     if ((Level->site[Player.x][Player.y].aux == SET) ||
  581.         (Level->site[Player.x][Player.y].aux == HECATE)) {
  582.       mprint("Your deity applauds the eradication of Chaos' taint");
  583.       gain_experience(1000);
  584.     }
  585.     else {
  586.       mprint("Your deity approves of your action.");
  587.       gain_experience(100);
  588.     }
  589.       }
  590.       else if ((Player.patron == SET) || (Player.patron == HECATE)) {
  591.     if ((Level->site[Player.x][Player.y].aux == ODIN) ||
  592.         (Level->site[Player.x][Player.y].aux == ATHENA)) {
  593.       mprint("Your deity applauds the obliteration of Law");
  594.       gain_experience(1000);
  595.     }
  596.     else {
  597.       mprint("Your deity approves of your action.");
  598.       gain_experience(100);
  599.     }
  600.       }
  601.       else if (Player.patron == DRUID) {
  602.     mprint("Your attempt to maintain the Balance is applauded....");
  603.     gain_experience(250);
  604.       }
  605.       else mprint("Nothing much happens");
  606.     }
  607.     else mprint("You feel an aura of unholiness arising from this spot....");
  608.   }
  609. }
  610.  
  611. void accuracy(blessing)
  612. int blessing;
  613. {
  614.   if (blessing > -1) {
  615.       mprint("Everything seems covered in bullseyes!");
  616.       Player.status[ACCURACY] += random_range(5)+1+blessing*5;
  617.       calc_melee();
  618.     }
  619.   else {
  620.     Player.status[ACCURACY]=0;
  621.     calc_melee();
  622.     mprint("Your vision blurs...");
  623.   }
  624. }
  625.